home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 49 / Amiga Format CD49 (2000-01-17)(Future Publishing)(GB)(Track 1 of 3)[!][issue 2000-02].iso / -serious- / programming / e / lsestuff / collectionyx.e < prev    next >
Text File  |  1999-11-29  |  7KB  |  285 lines

  1. OPT MODULE
  2.  
  3. MODULE '*xli'
  4. MODULE '*collectionX'
  5.  
  6. EXPORT OBJECT collectionYX OF xli
  7. ENDOBJECT
  8.  
  9. PROC private_Methods_From_Here() OF collectionYX IS EMPTY
  10.  
  11. PROC collectionYX() OF collectionYX IS TRUE
  12.  
  13. PROC clear() OF collectionYX
  14.    DEF nax:PTR TO collectionX
  15.    DEF next
  16.    nax := self.first()
  17.    WHILE nax
  18.       next := nax.next
  19.       self.remove(nax)
  20.       END nax
  21.       nax := next
  22.    ENDWHILE
  23. ENDPROC
  24.  
  25. PROC scrollY(amount) OF collectionYX IS self.scroll(amount)
  26.  
  27. PROC scrollX(amount) OF collectionYX
  28.    DEF nax:PTR TO collectionX
  29.    nax := self.first()
  30.    WHILE nax
  31.       nax.scrollX(amount)
  32.       nax := nax.next
  33.    ENDWHILE
  34. ENDPROC
  35.  
  36. PROC countYX() OF collectionYX
  37.    DEF nax:PTR TO collectionX
  38.    DEF count=NIL
  39.    nax := self.first()
  40.    WHILE nax
  41.       count := count + nax.countX()
  42.       INC count
  43.       nax := nax.next
  44.    ENDWHILE
  45. ENDPROC count
  46.  
  47. PROC countX() OF collectionYX
  48.    DEF nax:PTR TO collectionX
  49.    DEF count=NIL
  50.    nax := self.first()
  51.    WHILE nax
  52.       count := count + nax.countX()
  53.       nax := nax.next
  54.    ENDWHILE
  55. ENDPROC count
  56.  
  57. PROC countY() OF collectionYX IS self.countNodes()
  58.  
  59. PROC getCollectionX(y) OF collectionYX IS self.find(y)
  60.  
  61. PROC set(y, x, value) OF collectionYX
  62.    DEF nax:PTR TO collectionX
  63.    nax := self.ordFind(y)
  64.    IF nax = NIL
  65.       IF value = NIL THEN RETURN NIL
  66.       NEW nax.collectionX()
  67.       nax.id := y
  68.       self.ordInsert(nax)
  69.    ENDIF
  70.    nax.set(x, value)
  71. ENDPROC
  72.  
  73. PROC get(y, x) OF collectionYX
  74.    DEF nax:PTR TO collectionX
  75.    nax := self.ordFind(y)
  76.    IF nax = NIL THEN RETURN NIL
  77. ENDPROC nax.get(x)
  78.  
  79. PROC unSet(y, x) OF collectionYX
  80.    DEF nax:PTR TO collectionX
  81.    nax := self.ordFind(y)
  82.    IF nax = NIL THEN RETURN NIL
  83.    nax.unSet(x)
  84.    IF nax.countX() = NIL
  85.       self.remove(nax)
  86.       END nax
  87.    ENDIF
  88. ENDPROC
  89.  
  90. PROC cmpMapYX(nayx:PTR TO collectionYX) OF collectionYX
  91.    DEF nax1:PTR TO collectionX
  92.    DEF nax2:PTR TO collectionX
  93.    IF self.cmpMap(nayx) = FALSE THEN RETURN FALSE
  94.    nax1 := self.first()
  95.    nax2 := nayx.first()
  96.    WHILE nax1
  97.       IF nax1.cmpMapX(nax2) = FALSE THEN RETURN FALSE
  98.       nax1 := nax1.next
  99.       nax2 := nax2.next
  100.    ENDWHILE
  101. ENDPROC TRUE
  102.  
  103. PROC applyNewFrom(nayx:PTR TO collectionYX) OF collectionYX
  104.    DEF nax1:PTR TO collectionX
  105.    DEF nax2:PTR TO collectionX
  106.    DEF newnax:PTR TO collectionX
  107.    nax1 := self.first()
  108.    nax2 := nayx.first()
  109.    WHILE nax2
  110.       IF nax1.id = nax2.id
  111.          nax1 := nax1.next
  112.          nax2 := nax2.next
  113.       ELSEIF nax1.id > nax2.id
  114.          NEW newnax.collectionX()
  115.          newnax.id := nax2.id
  116.          nax2.cloneContentsTo(newnax)
  117.          self.ordInsert(newnax)
  118.          nax2 := nax2.next
  119.       ELSE -> nax1.id < nax2
  120.          nax1 := nax1.next
  121.       ENDIF
  122.    ENDWHILE
  123. ENDPROC
  124.  
  125. PROC applyAllFrom(nayx:PTR TO collectionYX) OF collectionYX
  126.    DEF nax1:PTR TO collectionX
  127.    DEF nax2:PTR TO collectionX
  128.    DEF newnax:PTR TO collectionX
  129.    nax1 := self.first()
  130.    nax2 := nayx.first()
  131.    WHILE nax2
  132.       IF nax1.id = nax2.id
  133.          nax2.cloneContentsTo(nax1)
  134.          nax1 := nax1.next
  135.          nax2 := nax2.next
  136.       ELSEIF nax1.id > nax2.id
  137.          NEW newnax.collectionX()
  138.          newnax.id := nax2.id
  139.          nax2.cloneContentsTo(newnax)
  140.          self.ordInsert(newnax)
  141.          nax2 := nax2.next
  142.       ELSE -> nax1.id < nax2
  143.          nax1 := nax1.next
  144.       ENDIF
  145.    ENDWHILE
  146. ENDPROC
  147.  
  148. PROC applyORFrom(nayx:PTR TO collectionYX) OF collectionYX
  149.    DEF nax1:PTR TO collectionX
  150.    DEF nax2:PTR TO collectionX
  151.    DEF newnax:PTR TO collectionX
  152.    nax1 := self.first()
  153.    nax2 := nayx.first()
  154.    WHILE nax2
  155.       IF nax1.id = nax2.id
  156.          nax1 := nax1.next
  157.          nax2 := nax2.next
  158.          nax1.applyORFrom(nax2)
  159.       ELSEIF nax1.id > nax2.id
  160.          NEW newnax.collectionX()
  161.          newnax.id := nax2.id
  162.          nax2.cloneContentsTo(newnax)
  163.          self.ordInsert(newnax)
  164.          nax2 := nax2.next
  165.       ELSE -> nax1.id < nax2
  166.          nax1 := nax1.next
  167.       ENDIF
  168.    ENDWHILE
  169. ENDPROC
  170.  
  171. PROC applyExistsFrom(nayx:PTR TO collectionYX) OF collectionYX
  172.    DEF nax1:PTR TO collectionX
  173.    DEF nax2:PTR TO collectionX
  174.    nax1 := self.first()
  175.    nax2 := nayx.first()
  176.    WHILE nax2
  177.       IF nax1.id = nax2.id
  178.          nax1 := nax1.next
  179.          nax2 := nax2.next
  180.          nax1.applyExistsFrom(nax2)
  181.       ELSEIF nax1.id > nax2.id
  182.          nax2 := nax2.next
  183.       ELSE -> nax1.id < nax2
  184.          nax1 := nax1.next
  185.       ENDIF
  186.    ENDWHILE
  187. ENDPROC
  188.  
  189. PROC applyANDFrom(nayx:PTR TO collectionYX) OF collectionYX
  190.    DEF nax1:PTR TO collectionX
  191.    DEF nax2:PTR TO collectionX
  192.    nax1 := self.first()
  193.    nax2 := nayx.first()
  194.    WHILE nax2
  195.       IF nax1.id = nax2.id
  196.          nax1 := nax1.next
  197.          nax2 := nax2.next
  198.          nax1.applyANDFrom(nax2)
  199.       ELSEIF nax1.id > nax2.id
  200.          nax2 := nax2.next
  201.       ELSE -> nax1.id < nax2
  202.          nax1 := nax1.next
  203.       ENDIF
  204.    ENDWHILE
  205. ENDPROC
  206.  
  207. PROC applyAveFrom(nayx:PTR TO collectionYX) OF collectionYX
  208.    DEF nax1:PTR TO collectionX
  209.    DEF nax2:PTR TO collectionX
  210.    DEF newnax:PTR TO collectionX
  211.    nax1 := self.first()
  212.    nax2 := nayx.first()
  213.    WHILE nax2
  214.       IF nax1.id = nax2.id
  215.          nax1 := nax1.next
  216.          nax2 := nax2.next
  217.          nax1.applyAveFrom(nax2)
  218.       ELSEIF nax1.id > nax2.id
  219.          NEW newnax.collectionX()
  220.          newnax.id := nax2.id
  221.          newnax.applyAveFrom(nax2)
  222.          self.ordInsert(newnax)
  223.          nax2 := nax2.next
  224.       ELSE -> nax1.id < nax2
  225.          nax1 := nax1.next
  226.       ENDIF
  227.    ENDWHILE
  228. ENDPROC
  229.  
  230. PROC cloneContentsTo(nayx:PTR TO collectionYX) OF collectionYX
  231.    DEF nax:PTR TO collectionX
  232.    DEF newnax:PTR TO collectionX
  233.    nayx.clear()
  234.    nax := self.first()
  235.    WHILE nax
  236.       NEW newnax.collectionX()
  237.       nax.cloneContentsTo(newnax)
  238.       nayx.addLast(newnax)
  239.       nax := nax.next
  240.    ENDWHILE
  241. ENDPROC self.first()
  242.  
  243. PROC cleanUp() OF collectionYX
  244.    DEF nax:PTR TO collectionX
  245.    DEF next
  246.    nax := self.first()
  247.    WHILE nax
  248.       next := nax.next
  249.       nax.cleanUp()
  250.       IF nax.countX() = NIL
  251.          self.remove(nax)
  252.          END nax
  253.       ENDIF
  254.       nax := next
  255.    ENDWHILE
  256. ENDPROC
  257.  
  258. PROC getMaxY() OF collectionYX IS self.getMaxID()
  259.  
  260. PROC getMinY() OF collectionYX IS self.getMinID()
  261.  
  262. PROC getMaxX() OF collectionYX
  263.    DEF maxx=NIL
  264.    DEF nax:PTR TO collectionX
  265.    nax := self.first()
  266.    WHILE nax
  267.       maxx := Max(maxx, nax.getMaxX())
  268.       nax := nax.next
  269.    ENDWHILE
  270. ENDPROC maxx
  271.  
  272. PROC getMinX() OF collectionYX
  273.    DEF minx=NIL
  274.    DEF nax:PTR TO collectionX
  275.    nax := self.first()
  276.    WHILE nax
  277.       minx := Min(minx, nax.getMinX())
  278.       nax := nax.next
  279.    ENDWHILE
  280. ENDPROC minx
  281.  
  282. PROC end() OF collectionYX IS self.clear()
  283.  
  284.  
  285.